// pages/donation/donation.js
const { get, post } = require('../../utils/request')
const { showSuccess, showError, showConfirm, formatDate, checkLoginForTabBar } = require('../../utils/util')

Page({
  data: {
    // 统计数据
    totalAmount: 0,
    totalCount: 0,
    helpedPets: 0,

    // 金额选择
    selectedAmount: 0,
    customAmount: '',
    showCustomInput: false,
    finalAmount: 0,

    // 捐助信息
    donorName: '',
    message: '',
    isAnonymous: false,

    // 状态
    donating: false,

    // 捐助记录
    recentDonations: []
  },

  onLoad() {
    this.loadDonationStats()
    this.loadRecentDonations()
  },

  onShow() {
    // 每次显示页面时刷新登录状态
    const app = getApp()
    if (app && app.refreshLoginStatus) {
      app.refreshLoginStatus()
    }

    // 检查登录状态
    if (!checkLoginForTabBar()) {
      return
    }

    this.loadDonationStats()
    this.loadRecentDonations()

    // 获取用户信息
    if (app.globalData.userInfo) {
      this.setData({
        donorName: app.globalData.userInfo.name || ''
      })
    }
  },

  // 加载捐助统计
  loadDonationStats() {
    // 使用现有的捐助列表API来计算统计数据
    get('/donation/list').then(res => {
      if (res && res.code === '200') {
        const donations = res.data || []

        let totalAmount = 0
        let totalCount = donations.length

        donations.forEach(item => {
          totalAmount += parseFloat(item.amount || 0)
        })

        this.setData({
          totalAmount: totalAmount.toFixed(0),
          totalCount,
          helpedPets: Math.floor(totalAmount / 100) // 假设每100元能帮助1只宠物
        })
      }
    }).catch(err => {
      console.error('加载统计数据失败:', err)
      // 如果是token过期，不显示错误提示，因为request.js已经处理了
      if (err && err.code !== '401') {
        // 设置默认值
        this.setData({
          totalAmount: 0,
          totalCount: 0,
          helpedPets: 0
        })
      }
    })
  },

  // 加载最近捐助记录
  loadRecentDonations() {
    get('/donation/list').then(res => {
      if (res && res.code === '200') {
        const donations = res.data || []

        // 格式化时间并取最近10条
        const recentDonations = donations
          .sort((a, b) => new Date(b.createTime) - new Date(a.createTime))
          .slice(0, 10)
          .map(item => ({
            ...item,
            createTime: formatDate(item.createTime)
          }))

        this.setData({
          recentDonations
        })
      }
    }).catch(err => {
      console.error('加载捐助记录失败:', err)
      // 如果是token过期，不显示错误提示，因为request.js已经处理了
      if (err && err.code !== '401') {
        this.setData({
          recentDonations: []
        })
      }
    })
  },

  // 选择金额
  selectAmount(e) {
    const amount = parseInt(e.currentTarget.dataset.amount)
    this.setData({
      selectedAmount: amount,
      customAmount: '',
      showCustomInput: false,
      finalAmount: amount
    })
  },

  // 显示自定义金额输入
  showCustomInput() {
    this.setData({
      selectedAmount: 0,
      showCustomInput: true,
      finalAmount: this.data.customAmount ? parseFloat(this.data.customAmount) : 0
    })
  },

  // 自定义金额输入
  onCustomAmountInput(e) {
    const value = e.detail.value
    const amount = parseFloat(value) || 0
    
    this.setData({
      customAmount: value,
      finalAmount: amount
    })
  },

  // 捐助人姓名输入
  onDonorNameInput(e) {
    this.setData({
      donorName: e.detail.value
    })
  },

  // 留言输入
  onMessageInput(e) {
    this.setData({
      message: e.detail.value
    })
  },

  // 匿名捐助选择
  onAnonymousChange(e) {
    this.setData({
      isAnonymous: e.detail.value.length > 0
    })
  },

  // 表单验证
  validateForm() {
    if (!this.data.finalAmount || this.data.finalAmount <= 0) {
      showError('请选择捐助金额')
      return false
    }

    if (this.data.finalAmount < 1) {
      showError('捐助金额不能少于1元')
      return false
    }

    if (this.data.finalAmount > 10000) {
      showError('单次捐助金额不能超过10000元')
      return false
    }

    return true
  },

  // 发起捐助
  async onDonate() {
    if (!checkLoginForTabBar()) {
      return
    }

    if (this.data.donating) return

    if (!this.validateForm()) return

    try {
      await showConfirm(`确认捐助 ¥${this.data.finalAmount} 吗？`)
    } catch {
      return
    }

    this.setData({ donating: true })

    const app = getApp()
    const userInfo = app.globalData.userInfo

    const donationData = {
      amount: this.data.finalAmount,
      donorName: this.data.isAnonymous ? '' : (this.data.donorName || userInfo.name),
      message: this.data.message.trim(),
      isAnonymous: this.data.isAnonymous,
      userId: userInfo.id,
      userName: userInfo.name
    }

    try {
      // 这里应该调用支付接口，简化处理直接提交
      await this.requestPayment()
      
      // 支付成功后提交捐助记录
      await post('/donation', donationData)
      
      showSuccess('捐助成功，感谢您的爱心！')
      
      // 重置表单
      this.resetForm()
      
      // 刷新数据
      this.loadDonationStats()
      this.loadRecentDonations()
      
    } catch (err) {
      showError(err.message || '捐助失败，请重试')
    } finally {
      this.setData({ donating: false })
    }
  },

  // 发起支付（模拟）
  requestPayment() {
    return new Promise((resolve, reject) => {
      // 这里应该调用微信支付API
      // 为了演示，我们模拟支付成功
      wx.showModal({
        title: '模拟支付',
        content: `模拟支付 ¥${this.data.finalAmount}，点击确定表示支付成功`,
        success: (res) => {
          if (res.confirm) {
            resolve()
          } else {
            reject(new Error('支付取消'))
          }
        }
      })
    })
  },

  // 重置表单
  resetForm() {
    this.setData({
      selectedAmount: 0,
      customAmount: '',
      showCustomInput: false,
      finalAmount: 0,
      message: '',
      isAnonymous: false
    })
  }
})
